//一、哈希表
//二、双端队列
//3. 无重复字符的最长子串
//https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/
class Solution {
    int a[128];//这个数组用作哈希表，来存储字符的索引。
public:
    int lengthOfLongestSubstring(string s) {
        memset(a, 0,sizeof(a));//使用 memset 函数将数组 a 的所有元素初始化为0。这表示在开始遍历字符串之  前，所有字符都没有出现过。
        int i = 0,max_size =0;
        for(int j = 0; j<s.size();j++){
            char c =s[j];
            while (a[c ]> 0){
                a[s[i]]--;//表示这个字符已经从当前考虑的子串中移除。
                i++;
            }
            a[c]++;//将字符 c 在数组 a 中的索引值加1，表示这个字符现在是子串的最后一个字符。
            max_size = max(max_size,j - i + 1);//更新最长子串长度
        }
        return max_size;
    }

};